package cn.ijero.linechart

import androidx.annotation.ColorInt
import androidx.annotation.Size

typealias Line<T> = Pair<String, List<T>>

interface ILine {
    fun dateTime(): String
    fun value(): Double
}

data class LineChartData<T : ILine>(
    /**
     * 时间轴要显示的时间数量，均匀分布在x轴底部
     *
     * @author Jero
     */
    val timelineCount: Int = 5,
    /**
     * 要绘制线的数据集合
     *
     * @author Jero
     */
    val lines: List<Line<T>> = listOf(),
    /**
     * 用来计算每个格子宽度，并固定总宽度，如果未指定，将使用lines里面提供的data的size作为总共有多少条数据
     *
     * @author Jero
     */
    val totalCount: Int = lines.maxOfOrNull { it.second.size } ?: 0
)
data class LineChartStyle(
    /**
     * 是否绘制标题（每条线的颜色提醒）
     *
     * @author Jero
     */
    val showTitle: Boolean = false,

    /**
     * 时间轴文本颜色
     *
     * @author Jero
     */
    @ColorInt val timelineTextColor: Int = 0xFF999999.toInt(),
    /**
     * Y轴文本颜色集合，只取前三个，分别作为正值(-)，零值(0)，负值(-)的颜色，多余不去，取不到将使用默认的颜色
     *
     * @author Jero
     */
    @Size(3) val yAxisTextColors: List<Int>,

    /**
     * 绘制线的颜色集合，分别对应到[LineChartData]的[LineChartData.lines]，如果长度无法对应，将使用默认颜色
     *
     * @author Jero
     */
    val lineColors: List<Int>,

)